package com.lzy.wzy.mapper;

import com.lzy.wzy.model.*;
import com.lzy.wzy.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Mapper
public interface UserMapper {

    List<User> getUser();

    UserPartBean queryUser(String username);

    Integer addUser(User user);

    List<User> queryAllUserInfo();

    //获取用户姓名
    String queryNameByUserId(String userId);

    Integer modifyUserInfo(User user);

    void updateOnlineTime(Map<String, Object> map);

    List<String> queryUserAllPermission(String userUuid);

    Integer bindUserAndRole(UserRoleBean userRoleBean);

    //通过username获取用户
    Integer queryUserCountByUserName(String username);

    //通过id获取角色名称
    String getRoleNameByRoleId(int roleId);

    //通过roleId获取角色名称
    Integer getRoleByRoleName(String roleName);

    //通过部门name查询部门
    Integer getDepartmentByDepartmentName(String departmentName);

    //通过userid获取角色
    String getRoleByUserId(String userId);

    //    获取所有角色
    List<RoleBean> getAllRole();

    //删除用户
    Integer deleteUserById(String userUuid);


    //获取用户
    Integer getUserCountByUserUuid(String userUuid);

    //    获取所有部门
    List<DepartmentBean> getAllDepartment();

    //匹配部门id 和 角色id
    Integer matchRolesAndDepartments(@Param("departmentId") int departmentId, @Param("roleId") int roleId);


    //    通过部门id查询对应部门名称
    String getDepartmentNameByDepartmentId(int departmentId);

    //通过用户名和姓名查询用户
    List<User> getUserByUsernameOrName(String searchValue);

    //通过角色查询用户
    List<User> getUserInfoByRole(String role);

    //通过部门查询员工
    List<User> getUserInfoByDepartment(String department);

    //保存新职位
    Integer saveNewPositionInfo(String roleName);

    //添加新部门
    Integer saveNewDepartment(String departmentName);

    //部门绑定新职位
    Integer addNewPositionToDepartment(@Param("roleId") int roleId, @Param("departmentId") int departmentId);

    //获取部门下的权限
    List<PermissionBean> getPermissionUnderTheDepartment(int departmentId);

    //获取部门下的职位
    List<RoleBean> getAPositionUnderTheDepartment(int departmentId);

    //为部门添加权限
    Integer addPermissionsToTheRole(@Param("list") List<RolePermissionBean> list);

    List<String> getApprovers(@Param("list") List<Integer> list);

    //发起人签字
    void saveApproveInfo(@Param("id") String id, @Param("workOrderNumber") String workOrderNumber,@Param("userId")String userId, @Param("proInstId") String proInstId, @Param("apStatus") String apStatus,@Param("type")String type,@Param("begin")LocalDateTime begin);

    //审批人签字
    void signatureOfApprover(@Param("approver") String approver, @Param("userId") String userId, @Param("status") String status, @Param("workOrderNumber") String workOrderNumber,@Param("processInstanceId")  String processInstanceId,@Param("executor") String executor);

    //匹配用户和部门
    Integer matchUserAndDepartment(@Param("userId") String userId, @Param("departmentId") int departmentId);

    //获取用户所在的部门id
    Integer getDepartmentIdByUserId(String userId);

    String getDepartmentNameByUserId(String userId);

    //获取工单审批状态
    Integer getApproveStatus(@Param("workOrderNumber") String workOrderNumber,@Param("flag")int flag);

    void saveWorkOrderTask(@Param("workOrderNumber") String workOrderNumber, @Param("proIntsId") String proIntsId);


    //获取所有任务
    List<TaskVo> getTask(String userId);

    List<WorkOrderTaskVo> getHiApprove(@Param("userId") String userId,@Param("pageNum")int pageNum,@Param("pageSize") int pageSize);

    //保存拒绝原因
    void saveRejectReason(@Param("rejectReason") String rejectReason, @Param("workOrderNumber") String workOrderNumber);

    //保存结束时间
    void saveEndTime(@Param("endTime") LocalDateTime endTime, @Param("workOrderNumber") String workOrderNumber);

    //获取审批结果
    List<ApprovalResultsVo> getApprovalResults(String userId);

    //获取半年内的审批结果
    List<ApprovalResultsVo> getWithinHalfAYearAllApprovalResults(String userId);

    //获取审批详情
    ApprovalDetailsVo getApprovalDetails(int id);

    //获取密码
    String getPasswordByUserId(String userId);

    //修改密码
    Integer updatePassword(@Param("password") String password, @Param("userId") String userId);

    //获取用户角色映射
    Integer getRoleMapping(int roleId);

    //删除角色
    Integer deleteRole(int roleId);

    //修改用户和角色映射
    void  updateRoleUserMapping(@Param("userId")String userId,@Param("roleId") Integer roleId);


    //删除角色权限映射
    Integer deleteRolePermissionMapping(int roleId);

    UserPartInfoVo getUserPartInfo(String userId);

    //获取用户工号
    String getUsernameByUserId(String userId);

    //获取所有工号
    List<KeyValueVo> getAllJobNumber();

    //更新用户状态
    Integer updateUserStatus(@Param("status") int status,@Param("userId")String userId,@Param("beforeStatus")int beforeStatus);

    //获取用户状态
    Integer getUserStatus(String userId);

    //通过userId获取邮箱
    String getEmailById(String userId);

    //更新邮箱
    Integer updateEmail(@Param("email") String email,@Param("userId") String userId);

    //批量获取用户邮箱
    String[] batchQueryEmail(@Param("list")List<String> list);

    //保存路径权限映射
    void saveUrlAuthentication(@Param("url")String url,@Param("authority") String authority);

    //查询路径对应的权限
    String queryUrlAuthorityInfo(String url);

    //获取所有正常用户
    List<IdentUser> getAllNormalUser();

    //更新审批状态
    void updateApproveStatus(@Param("status")String status,@Param("proInstId")String proInstId);

    //获取审批详情
    ApprovalDetailsVo queryApproveDetails(String proInstId);

    void updateProApproveStatus(@Param("var1") String var1,@Param("var2") String var2,@Param("proInstId")String proInstId,@Param("flag") int flag);

    void updatePsApproveStatus(@Param("var1")String var1,@Param("var2") String var2,@Param("proInstId")String proInstId);

    void updateCraApproveStatus(@Param("var1")String var1,@Param("var2") String var2,@Param("proInstId")String proInstId);

    void updateQalApproveStatus(@Param("var1")String var1,@Param("var2") String var2,@Param("proInstId")String proInstId);

    void updateBlApproveStatus(@Param("var1")String var1,@Param("var2") String var2,@Param("proInstId")String proInstId);

    void updatePlApproveStatus(@Param("var1") String var1,@Param("var2") String var2,@Param("proInstId")String proInstId);

    Set<String> getAllVideo();
}
